package jgespres;

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.event.*;

/**
 * Gestionnaire de la table de paramètres
 * 
 * @author guerfyld 
 * @version 2.0
 */
public class JTableDlg extends JDialog implements TableModel {
    // Elements à gerer
    private JTable      jTable;
    private Tables      pTbl;

    /**
     * Constructeur
     * 
     * @param Tbl       Table des paramètres
     */
    public JTableDlg(Tables Tbl) {        
        // Appel constructeur (Boite de dialogue Modal)
        super(JFrame.getFrames()[0], jgespres.getResourceString("Planning.Table"), true);

        // Initialisation
        pTbl = Tbl;
        createGUI();
        
        // Affiche boite de dialogue
        setVisible(true);
    }
    
    /**
     * Création élèments de l'affichage
     */
    private void createGUI() {
        // Définitions de la boite de dialogue
        setResizable(false);
        
        // Défintition Table des élèves
        jTable = new JTable();
        jTable.setAutoCreateColumnsFromModel(false);
        jTable.setFont(new java.awt.Font("Times New Roman", 0, 16));
        jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTable.setRowHeight(20);
        jTable.setModel(this);
        jTable.setColumnModel(new DefaultTableColumnModel() {
            // Fixe largeur des colonnes de la table
            public void addColumn(TableColumn tc) {
                switch (tc.getModelIndex()) {
                    case 0:
                        tc.setPreferredWidth(100);
                        break;
                    case 1:
                        tc.setPreferredWidth(50);
                        break;
                    case 2:
                        tc.setPreferredWidth(300);
                        break;
                }
                super.addColumn(tc);
            }  
        });
        jTable.createDefaultColumnsFromModel();
        jTable.setPreferredScrollableViewportSize(new Dimension(450, 150));
        
        // Définition Panel de la table
        JScrollPane tablePane = new JScrollPane();
        tablePane.setViewportView(jTable);

        // Définition Bouton Ajout parametre
        JButton jBtnAdd = new JButton();
        jBtnAdd.setIcon(new ImageIcon(getClass().getResource("/jgespres/images/add.png")));
        jBtnAdd.setText(jgespres.getResourceString("Planning.Table.Add"));
        jBtnAdd.setToolTipText(jgespres.getResourceString("Planning.Table.Add.tooltip"));
        jBtnAdd.setHorizontalAlignment(SwingConstants.LEFT);
        jBtnAdd.setIconTextGap(10);
        jBtnAdd.setMaximumSize(new Dimension(125, 30));
        jBtnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                BtnAddActionPerformed(evt);
            }
        });
        
        // Définition Bouton Suppression d'un parametre
        JButton jBtnDel = new JButton();
        jBtnDel.setIcon(new ImageIcon(getClass().getResource("/jgespres/images/cancel.png")));
        jBtnDel.setText(jgespres.getResourceString("Planning.Table.Del"));
        jBtnDel.setToolTipText(jgespres.getResourceString("Planning.Table.Del.tooltip"));
        jBtnDel.setHorizontalAlignment(SwingConstants.LEFT);
        jBtnDel.setIconTextGap(10);
        jBtnDel.setMaximumSize(new Dimension(125, 30));
        jBtnDel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                BtnDelActionPerformed(evt);
            }
        });
        
        // Définition Panel des boutons
        JPanel buttonsPane = new JPanel();
        buttonsPane.setLayout( new BoxLayout(buttonsPane, BoxLayout.Y_AXIS) );
        buttonsPane.setPreferredSize(new Dimension(125, 200) );
        buttonsPane.add(jBtnAdd);
        buttonsPane.add(jBtnDel);
        
        // Définition de la boite de dialogue
        getContentPane().setLayout( new BorderLayout(1, 2) );
        getContentPane().add(tablePane, BorderLayout.CENTER);
        getContentPane().add(buttonsPane, BorderLayout.EAST);
        pack();
        jgespres.centerDialog(this);
    }

    /**
     * Gestion action bouton ADD
     */
    private void BtnAddActionPerformed(ActionEvent evt) {
        String tbl = jgespres.NULL;
        String key = jgespres.NULL;
        // Ajout ligne vide
        pTbl.delParameter(tbl, key);
        pTbl.addParameter(tbl, key, jgespres.NULL);
        jTable.createDefaultColumnsFromModel();
    }
    
    /**
     * Gestion action sur bouton DEL
     */
    private void BtnDelActionPerformed(ActionEvent evt) {
        int row = jTable.getSelectedRow();
        if (row >= 0) {
            String tbl = (String) getValueAt(row, 0);
            String key = (String) getValueAt(row, 1);
            pTbl.delParameter(tbl, key);            
        }
        jTable.createDefaultColumnsFromModel();
    }

    // ********************************************************
    // Implementation interface TableModel
    // ********************************************************
    public int getRowCount() {
        return pTbl.getSize();
    }
    public int getColumnCount() {
        return 3;
    }
    public String getColumnName(int columnIndex) {
        return jgespres.getResourceString("Planning.Table.Col"+columnIndex);
    }
    public Class getColumnClass(int columnIndex) {
        return getValueAt(0, columnIndex).getClass();
    }
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }
    public Object getValueAt(int rowIndex, int columnIndex) {
        return pTbl.getValue(rowIndex, columnIndex);
    }
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        pTbl.setValue(rowIndex, columnIndex, aValue);
        jTable.createDefaultColumnsFromModel();
    }
    public void addTableModelListener(TableModelListener l) {}
    public void removeTableModelListener(TableModelListener l) {}
}
